home *** CD-ROM | disk | FTP | other *** search
/ Univers Mac Interactif 53 / Univers Mac Interactif - Issue 53.iso / UNIVERS MAC 53 / Hypercard / Sans-Faute⁄Grammaire® / Sans-Faute⁄Grammaire ƒ / Pour les autres applications / 4D / External SFG pour 4D / Sources / Ext4D.p next >
Text File  |  1995-08-28  |  27KB  |  811 lines

  1. unit Ext4D;
  2. {--------------------------------------------------------------------------------}
  3. { Ext4D.p P header file}
  4. {}
  5. { Copyright ACI SA 1985-95}
  6. { --------------------------------------------------------------------------------}
  7. {}
  8. {}
  9. { --------------------------------------------------------------------------------}
  10. {  Modifications History}
  11. { --------------------------------------------------------------------------------}
  12. {  Date       Version}
  13. { --------------------------------------------------------------------------------}
  14. {  06/27/95   2.0 Alpha 1 release}
  15. {}
  16. { --------------------------------------------------------------------------------}
  17. interface
  18. {$IFC UNDEFINED __EXTERNAL4D__}
  19. {$SETC __EXTERNAL4D__ := 1}
  20. {_______________________________________________________________}
  21.  
  22.  
  23.  
  24.     const
  25.  
  26. {--------------------------------------------------------------------------------}
  27. {Selectors for 4th Dimension entry points routine}
  28. {--------------------------------------------------------------------------------}
  29.  
  30. {version 2.0.0 or later}
  31.  
  32.         kEX_CREATE_RECORD = 1;
  33.         kEX_SAVE_RECORD = 2;
  34.         kEX_NEXT_RECORD = 3;
  35.         kEX_PREVIOUS_RECORD = 4;
  36.         kEX_GOTO_SELECTED_RECORD = 5;
  37.         kEX_RECORDS_IN_SELECTION = 6;
  38.         kEX_DELETE_SELECTION = 7;
  39.         kEX_FIRST_RECORD = 8;
  40.         kEX_COUNT_FILES = 9;
  41.         kEX_COUNT_FIELDS = 10;
  42.         kEX_FILENAME = 11;
  43.         kEX_FIELD_ATTRIBUTES = 12;
  44.         kEX_SORT_SELECTION = 13;
  45.         kEX_SEARCH = 14;
  46.         kEX_BEFORE_SELECTION = 15;
  47.         kEX_END_SELECTION = 16;
  48.         kEX_GET_FIELD = 17;
  49.         kEX_PUT_FIELD = 18;
  50.         kEX_GET_VARIABLE = 19;    {Not on 4D server}
  51.         kEX_PUT_VARIABLE = 20;    {Not on 4D server}
  52.         kEX_INSTALL_TASK = 21;
  53.         kEX_REMOVE_TASK = 22;
  54.         kEX_GET_RESID = 23;
  55.         kEX_GET_EXPORT_FILTER = 24;
  56.         kEX_GET_IMPORT_FILTER = 25;
  57.         kEX_GET_PACKED_RECORD = 26;
  58.         kEX_PUT_PACKED_RECORD = 27;
  59.         kEX_CREATE_SET = 28;
  60.         kEX_USE_SET = 29;
  61.         kEX_EXECUTE_PROCEDURE = 30;    {Not on 4D server}
  62.         kEX_EXECUTE_FUNCTION = 31;    {Not on 4D server}
  63.  
  64. {EP #32 to #38 are not available}
  65.  
  66.         kEX_EVENT_IS_TAKEN = 39;
  67.         kEX_LOCKED = 40;
  68.         kEX_READ_WRITE = 41;
  69.         kEX_LOAD_RECORD = 42;
  70.         kEX_RELATE_ONE = 43;
  71.         kEX_RELATE_MANY = 44;
  72.         kEX_IS_MULTIUSER = 45;
  73.  
  74. {EP #46 is not available}
  75.  
  76.         kEX_STRING = 47;
  77.         kEX_POPUP_FIELD_LIST = 48;    {Not on 4D server}
  78.         kEX_POPUP_FILE_LIST = 49;    {Not on 4D server}
  79.         kEX_GET_FILEFIELD_NUM = 50;
  80.         kEX_SELECTED_RECORD_NUMBER = 51;
  81.  
  82. {EP #52 to #55 are not available}
  83.  
  84.         kEX_GET_INFORMATION = 56;
  85.         kEX_MESSAGES = 57;
  86.  
  87. {EP #58 to #64 are not available}
  88.  
  89. {version 2.1.0 or later}
  90.  
  91.         kEX_UPDATE_VARIABLES = 65;    {Not on 4D server}
  92.         kEX_CHANGE_TITLE = 66;
  93.         kEX_CLOSE_EXT_WINDOW = 68;
  94.         kEX_GET_4D_GROW_ZONE = 69;
  95.  
  96. {EP #70 to #72 are not available}
  97.  
  98.         kEX_GET_RECORD_NUMBER = 73;
  99.         kEX_ADD_TO_SET = 74;
  100.         kEX_CREATE_EMPTY_SET = 75;
  101.         kEX_DELETE_SET = 76;
  102.  
  103. {EP #77 to #79 are not available}
  104.  
  105. {version 2.1.1 or later}
  106.  
  107.         kEX_GET_CURRENT_PAGE = 80;    {Not on 4D server}
  108.  
  109. {version 3.0.0 or later}
  110.  
  111. {EP #81 is not available}
  112.  
  113.         kEX_TOKENIZE = 82;    {Not on 4D server}
  114.         kEX_EXEC_TOKEN_PROC = 83;    {Not on 4D server}
  115.         kEX_EXEC_TOKEN_FUNC = 84;    {Not on 4D server}
  116.         kEX_NEW_PROCESS = 85;
  117.         kEX_KILL_PROCESS = 86;
  118.         kEX_FREEZE_PROCESS = 87;
  119.         kEX_UNFREEZE = 88;
  120.         kEX_PUT_PROCESS_TO_SLEEP = 89;
  121.         kEX_GET_WINDOW_PROCESS = 90;
  122.         kEX_CURRENT_ID = 91;
  123.         kEX_SET_WINDOW_PROCESS = 92;
  124.         kEX_YIELD = 93;
  125.         kEX_GET_PROCESS_INFO = 94;
  126.         kEX_NB_PROCESS = 95;
  127.         kEX_GOTO_RECORD = 96;
  128.  
  129. {EP #97 to #99 are not available}
  130.  
  131.         kEX_READ_DOCUMENT = 100;    {Not on 4D server}
  132.         kEX_SAVE_DOCUMENT = 101;    {Not on 4D server}
  133.         kEX_READ_DATA = 102;    {4D Client only}
  134.         kEX_WRITE_DATA = 103;    {4D Client only}
  135.         kEX_OPEN_PRINTER = 104;
  136.         kEX_RELEASE_PRINTER = 105;
  137.         kEX_PERFORM_LOG_ACTION = 106;    {Not on 4D Client}
  138.  
  139. {EP #107 to #111 are not available}
  140.  
  141.         kEX_GET_USER_LIST = 112;
  142.  
  143. {EP #113 to #114 are not available}
  144.  
  145.         kEX_GET_PREF_FILE = 115;
  146.         kEX_DETOKENIZE = 116;    {Not on 4D server}
  147.         kEX_FIND_PROCID = 117;    {Not on 4D server}
  148.         kEX_PROCID = 118;    {Not on 4D server}
  149.  
  150. {EP #119 is not available}
  151.  
  152.         kEX_TEST_PRINTER = 120;
  153.         kEX_THERMOMETER = 121;
  154.         kEX_YIELD_ABSOLUTE = 122;
  155.  
  156. {EP #123 to #124 are not available}
  157.  
  158.         kEX_GET_GLOBALVAR = 125;    {Not on 4D server}
  159.         kEX_SET_GLOBALVAR = 126;    {Not on 4D server}
  160.         kEX_EXIST_FILE = 127;    {Not on 4D server}
  161.  
  162. {EP #128 to #129 are not available}
  163.  
  164. {version 3.0.2 or later}
  165.  
  166.         kEX_GET_PRINT_INFO = 130;
  167.         kEX_GET_FIELD_ATTRIBUTES = 131;
  168.         kEX_GET_PROCEDITOR_TE = 132;
  169.         kEX_CALC_PROCEDITOR_LINE = 133;
  170.         kEX_FLOATING_WINDOW = 134;
  171.         kEX_UPDATE_PROCESS_VARIABLE = 135;
  172.         kEX_QUIT4D = 136;
  173.  
  174. {version 3.0.5 or later}
  175.  
  176.         kEX_LOG_INFO = 137;    {Not on 4D server}
  177.  
  178. {EP #138 to #141 are not available}
  179.  
  180.         kEX_OPEN_LOG = 142;    {Not on 4D server}
  181.  
  182. {version 3.1.0 or later}
  183.  
  184. {EP #143 to #144 are not available}
  185.  
  186.         kEX_GET_GROUP_LIST = 145;
  187.         kEX_UPDATE_INTERNAL_CACHE = 146;
  188.  
  189. {version 3.1.1 or later}
  190.  
  191.         kEX_RESTORE_MACOS_ENV = 147;
  192.         kEX_RESTORE_MAC4D_ENV = 148;
  193.         kEX_IS_BACKUP_ACTIVE = 149;
  194.  
  195. {version 3.2.0 or later}
  196.  
  197.         kEX_GET_LOGFIELD_TYPE = 150;
  198.         kEX_GET_LOGFIELD = 151;
  199.         kEX_NEWLOG = 152;    {Not on 4D server}
  200.         kEX_GESTALT = 153;
  201.         kEX_DOUBLE_2_EXTENDED = 154;    {PowerPC-based Mac or Windows version only}
  202.         kEX_EXTENDED_2_DOUBLE = 155;    {PowerPC-based Mac or Windows version only}
  203.         kEX_ARRAY_DOUBLE_2_EXTENDED = 156;    {PowerPC-based Mac or Windows version only}
  204.         kEX_ARRAY_EXTENDED_2_DOUBLE = 157;    {PowerPC-based Mac or Windows version only}
  205.         kEX_NEW_PROCESS_PPC = 158;    {PowerPC-based Mac or Windows version only}
  206.  
  207. {version 3.5.0 or later}
  208.  
  209.         kEX_GET_4DWIN_MACOS_GLOBALS = 159;    {Windows version only}
  210.  
  211.  
  212. {--------------------------------------------------------------------------------}
  213. {4th Dimension errors codes}
  214. {--------------------------------------------------------------------------------}
  215.  
  216. {4D database engine errors codes}
  217.  
  218.         kBadIndexPage = -10004;    {Index page is out of range}
  219.         kBadRecNumber = -10003;
  220. {Record is out of range  }
  221.         kBadRecStruct = -10002;
  222. {Invalid record structure }
  223.                                                                         {( data file needs to be repaired )}
  224.         kBadIndexStruct = -10001;
  225. {Invalid index page  }
  226.                                                                         {( index needs to be repaired or rebuilt )}
  227. { if 4D Client , maybe due to error }
  228.                                                                         {of connection reported by network component}
  229.         kBadDataAddr = -10000;    {Bad record address}
  230.         kNoEnoughRoom = -9999;        {No more space available to save the record}
  231.         kDuplicatedKey = -9998;        {Duplicated index key}
  232.         kMaxNbOfRecReached = -9997;        {Maximum number of records has been reached}
  233.         kStackFullErr = -9996;        {Stack is full}
  234.         kDemoVersion = -9995;        {Limits of demo version have been reached}
  235.         kComInterrupted = -9994;        {Serial communication interrupted by user}
  236.         kAccessDenied = -9991;        {Access privileges error}
  237.         kTimeOutErr = -9990;        {Time-out error}
  238.         kBadStructure = -9989;        {Invalid structure}
  239.                                                                         {( database needs to be repaired )}
  240.         kRelatedRecords = -9987;        {Other records are related to this record}
  241.         kRecordLockedDuringDel = -9986;        {Record(s) locked during an automatic deletion action}
  242.         kRecursiveIntegrity = -9985;        {Recursive integrity}
  243.         kDuplicatedKeyInTrans = -9984;        {Transaction cancelled because of a dup. index key }
  244.         kRecordNotInSelection = -9982;        {Record not in selection and could not be loaded}
  245.         kBadFileFieldTable = -9981;        {Invalid Field/File definition table sent}
  246.         kStructureIsLocked = -9980;        {File cannot be created because structure is locked}
  247.         kBadUserName = -9979;        {Unknown User}
  248.         kBadPassword = -9978;        {Invalid Password}
  249.         kBadSelection = -9977;        {The selection does not exist}
  250.         kBackupInProgress = -9976;        {Backup in progress, no modifications are allowed}
  251.         kCannotLoadTrIdxPage = -9975;        {Transaction index page could not be loaded}
  252.         kRecordAlreadyDeleted = -9974;        {The record has already been deleted}
  253.         kBadTRIC = -9973;        {TRIC resources are not the same}
  254.         kBadFileNumber = -9972;        {File number is out of range}
  255.         kBadFieldNumber = -9971;        {Field number is out of range}
  256.         kFieldNotIndexed = -9970;        {Field is not indexed}
  257.         kBadFieldType = -9969;        {Invalid field type requested}
  258.         kBadSelectedRecordNumber = -9968;        {Invalid selected record number requested}
  259.         kRecordNotLoaded = -9967;        {The record was not modified because}
  260.                                                                         {it could not be loaded}
  261.         kIncompatibleTypes = -9966;        {Invalid type requested}
  262.         kBadSearchDefinition = -9965;        {Bad search definition table sent}
  263.         kBadSortDefinition = -9964;        {Bad sort definition table sent}
  264.         kBadRecordNumber = -9963;        {Invalid record number requested}
  265.         kBackupCannotLaunched = -9962;        {The backup cannot be launched because}
  266.                                                                         {the server is shutting down}
  267.         kBackupNotRunning = -9961;        {The backup process is currently not running}
  268.         kBackupNotInstalled = -9960;        {4D Backup is not installed on the server}
  269.         kBackupAlreadyRunning = -9959;        {the backup process has already been started}
  270.                                                                         {by another user or process}
  271.         kProcessNotStarted = -9958;        {Process could not be started}
  272.         kListIsLocked = -9957;        {The list is locked}
  273.         kQTNotInstalled = -9955;        {QuickTime is not installed}
  274.         kSNoCurrentRecord = -9954;        {There is no current record}
  275.         kNoLogFile = -9953;        {There is no Log file}
  276.         kBadDataSegmentHeader = -9952;        {Invalid data segment}
  277.         kNotRelatedField = -9951;        {Field is not related to another one}
  278.         kBadDataSegmentNumber = -9950;        {Invalid data segment number}
  279.         kNamedSelNotExist = -9946;        {Unable to clear the named selection because}
  280.                                                                         {it does not exist}
  281.         kCDROMvers = -9945;        {CD-ROM 4D Runtime error,}
  282.                                                                         {writing operations are not allowed}
  283.         kPassportvers = -9943;        {4D Passport version error}
  284.         kLicensingError = -9942;        {4D Client Licensing scheme is incompatible}
  285.                                                                         {with this version of 4D Server}
  286.         kUnknownGestaltSelector = -9941;        {Unknown EX_GESTALT selector}
  287.         kExtInitFailed = -9940;        {4D Extension initialization failed}
  288.         kExtNotFound = -9939;        {External routine not found}
  289.  
  290. {Additional entry points errors codes}
  291.  
  292.         kCallNotImplemented = -1;            {Entry point is not implemented}
  293.         kInvalidFileNumber = 4001;        {Invalid file number}
  294.         kInvalidRecordNumber = 4002;        {Invalid record number}
  295.         kInvalidFieldNumber = 4003;        {Ivvalid field number}
  296.         kMNoCurrentRecord = 4004;        {There is no current record}
  297.  
  298.  
  299. {--------------------------------------------------------------------------------}
  300. {4D Extensions, External packages opcodes}
  301. {--------------------------------------------------------------------------------}
  302.  
  303.         kServerDeinitPackage = -220;
  304.         kServerCleanUp = -207;
  305.         kWriteOnServer = -206;
  306.         kReadOnServer = -205;
  307.         kClientDisconnect = -202;
  308.         kClientConnect = -201;
  309.         kServerInitPackage = -200;
  310.         kPackageGiveMemory = -10;
  311.         kClientDeinitPackage = -2;
  312.         kDeinitPackage = kClientDeinitPackage;
  313.         kClientInitPackage = -1;
  314.         kInitPackage = kClientInitPackage;
  315.  
  316.         kDontPurgePackage = 1022;
  317.  
  318. {--------------------------------------------------------------------------------}
  319. {4D Extensions, External areas events}
  320. {--------------------------------------------------------------------------------}
  321.  
  322. {[4D->X] in What of EventRecord}
  323.  
  324.         kIdleEvt = 0;
  325.         kInitEvt = 16;
  326.         kDeInitEvt = 17;
  327.         kCursorEvt = 18;
  328.         kHookEvt = 18;
  329.         kTestEvt = 20;
  330.         kSelectEvt = 21;
  331.         kDeSelectEvt = 22;
  332.         kResizeEvt = 24;
  333.         kScrollEvt = 25;
  334.         kStructEvt = 26;
  335.         kTestPrintSizeEvt = 27;
  336.         kPrintSizeEvt = 28;
  337.         kPrintBandEvt = 29;
  338.         kUndoEvt = 30;
  339.         kCutEvt = 31;
  340.         kCopyEvt = 32;
  341.         kPasteEvt = 33;
  342.         kClearEvt = 34;
  343.         kSelectAllEvt = 35;
  344.         kInstallMenusEvt = 40;
  345.         kDeInstallMenusEvt = 41;
  346.         kMenuSelectedEvt = 42;
  347.         kActivateMenusEvt = 43;
  348.         kGrowBoxEvt = 50;
  349.  
  350. {EventRecord fields}
  351.  
  352.         kZoneIsCustomized = 102;                    {[X->4D] during StructEvt in Message}
  353.  
  354.         kIsPrinting = -1;                        {[4D->X] during InitEvt in Message}
  355.         kIsExternalWindow = -1;                        {[4D->X] during InitEvt in When}
  356.         kIsOutPutLayout = 0;                        {[4D->X] during InitEvt in Modifiers}
  357.         kIsInputLayout = 1;                        {[4D->X] during InitEvt in Modifiers}
  358.  
  359.         kNeedMinSize = 121;                    {[X->4D] during GrowBoxEvt in Modifiers}
  360.                                                                          {Width, Height in Message}
  361.  
  362.         kCanRefuse = 0;                        {[4D->X] during DeInitEvt in Message}
  363.         kCannotRefuse = 130;                    {[X->4D] during DeInitEvt in Message}
  364.         kZoneRefuseDeInit = 122;                    {[X->4D] during DeInitEvt in Message}
  365.  
  366.         kZoneCanBeSelected = 101;                    {[X->4D] during TestEvt in Message}
  367.         kUseOffScreen = 256;                    {[X->4D] during TestEvt in Message}
  368.  
  369.         kZoneRefuse = 103;                    {[X->4D] during DeSelectEvt in Message}
  370.  
  371.         kIsNewData = 2;                        {[4D->X] during UpdateEvt in When}
  372.  
  373.         kZoneVariableFrame = 104;                    {[X->4D] during TestPrintSizeEvt in Message}
  374.  
  375.         kGoToNextField = 110;                    {[X->4D] during user events in Message}
  376.         kGoToPreviousField = 111;                    {[X->4D] during user events in Message}
  377.         kEventNotTaken = 112;                    {[X->4D] during user events in Message}
  378.         kCallTheScript = 301;                    {[X->4D] during user events in Message}
  379.  
  380. {Edit menu items numbers}
  381.  
  382.         kCutItem = 3;
  383.         kCopyItem = 4;
  384.         kPasteItem = 5;
  385.         kClearItem = 6;
  386.         kSelectAllItem = 7;
  387.  
  388.  
  389.  
  390. {--------------------------------------------------------------------------------}
  391. {4D Extensions, External process events}
  392. {--------------------------------------------------------------------------------}
  393.  
  394.         kTerminateProcess = 33;                        {[4D->Process] in What of EventRecord}
  395.                                                                          {Process must terminate a.s.a.p.}
  396.  
  397. {--------------------------------------------------------------------------------}
  398. {4th Dimension, kEX_GET_INFORMATION, PackInitBlock.fVersion}
  399. {--------------------------------------------------------------------------------}
  400.  
  401. {Masks fParam1 returned by kEX_GET_INFORMATION}
  402.         kUserModeMask = $40000000;
  403.         kAppTypeMask = $20000000;
  404.         kMessagesStatusMask = $10000000;
  405.         kCompiledStatusMask = $8000000;
  406.         kIsWorkStationMask = $4000000;
  407.         kIsServerMask = $2000000;
  408.  
  409. {For testing fH returned by kEX_GET_INFORMATION}
  410.         kIsSpecialMask = $20;
  411.         kIsDemoMask = $10;
  412.  
  413.  
  414.  
  415. {--------------------------------------------------------------------------------}
  416. {4th Dimension, kEX_FIELD_ATTRIBUTES, kEX_GET_FIELD_ATTRIBUTES}
  417. {--------------------------------------------------------------------------------}
  418.  
  419.         kIndexMask = $8000;
  420.         kUniqueMask = $4000;
  421.         kMandatoryMask = $2000;
  422.         kChoiceListMask = $1000;
  423.         kModifiableMask = $800;
  424.         kEnterableMask = $400;
  425.         kInvisibleMask = $100;
  426.         kOneToManyMask = $40;
  427.         kManyToOneMask = $20;
  428.         kIntegrityMask = $4;
  429.         kNoDeleteMask = $2;
  430.         kUpdateLinkMask = $1;
  431.  
  432.     type
  433.  
  434.  
  435. {--------------------------------------------------------------------------------}
  436. {4th Dimension field types}
  437. {--------------------------------------------------------------------------------}
  438.  
  439.         FieldKind = (eAlphaField,        {0, Alphanumeric field (from 2 to 80 characters)}
  440.             eRealField,            {1, Numeric field (Double or Extended value)}
  441.             eTextField,            {2, Text field (up to 32000 characters)}
  442.             ePictureField,        {3, Picture field (virtually any block of data)}
  443.             eDateField,            {4, Date field}
  444.             eDummy1, eBooleanField,        {6, Boolean field}
  445.             eSubfileField,        {7, Subfile field}
  446.             eIntegerField,        {8, Integer field (-32768..32767)}
  447.             eLongintField,        {9, Long Integer field (-2^31..(2^31)-1)}
  448.             eDummy2, eTimeField            {11, Time field}
  449.             );
  450.  
  451.  
  452.  
  453. {--------------------------------------------------------------------------------}
  454. {4th Dimension expression and variable types}
  455. {--------------------------------------------------------------------------------}
  456.  
  457.         ValueKind = (eUnused1, eReal,                    {1, Variable declared using C_REAL}
  458.             eText,                    {2, Variable declared using C_TEXT}
  459.             ePicture,                {3, Variable declared using C_PICTURE}
  460.             eDate,                    {4, Variable declared using C_DATE}
  461.             eUndefined,                {5, Undefined variable}
  462.             eBoolean,                {6, Variable declared using C_BOOLEAN}
  463.             eUnused2, eInteger,                {8, Variable declared using C_INTEGER}
  464.             eLongint,                {9, Variable declared using C_LONGINT}
  465.             eUnused3, eTime,                    {11, Variable declared using C_TIME}
  466.             eUnused4, eArrayTable,            {13, Any two-dimensional array}
  467.             eArrayReal,                {14, One dimension array declared using ARRAY REAL}
  468.             eArrayInteger,            {15, One dimension array declared using ARRAY INTEGER}
  469.             eArrayLongint,            {16, One dimension array declared using ARRAY LONGINT}
  470.             eArrayDate,                {17, One dimension array declared using ARRAY DATE}
  471.             eArrayText,                {18, One dimension array declared using ARRAY TEXT}
  472.             eArrayPicture,            {19, One dimension array declared using ARRAY PICTURE}
  473.             eUnused5, eArrayString,            {21, One dimension array declared using ARRAY STRING}
  474.             eUnused6, eUnused7, eString                    {24, Variable declared using C_STRING}
  475.             );
  476.  
  477.  
  478.  
  479. {--------------------------------------------------------------------------------}
  480. {4th Dimension search and sort operators}
  481. {--------------------------------------------------------------------------------}
  482.  
  483. {Values for the field fOperator of LineBlock data structure}
  484. {These values define the logical connection between the lines of a search definition}
  485.         Operator = (eNoOperator,            {Always 1st line of a search definition}
  486.             eLogicalAND,            {AND     (& operator)}
  487.             eLogicalOR,                {OR      (| operator)}
  488.             eExcept                    {EXCEPT  (# operator)}
  489.             );
  490.  
  491. {Values for the field fOperation of LineBlock data structure}
  492. {These values define the comparison operator for the line of search definition}
  493.         Operation = (eNoOperation,            {No search line can have this value}
  494.             eIsEqual,                {Is equal to}
  495.             eIsDifferent,            {Is not equal to}
  496.             eIsGreater,                {Is greater than}
  497.             eIsGreaterOrEqual,    {Is greater or equal to}
  498.             eIsLess,                    {Is less than}
  499.             eIsLessOrEqual,        {Is less or equal to}
  500.             eContains,                {Contains}
  501.             eNotContains            {Does not contains}
  502.             );
  503.  
  504.  
  505.  
  506. {--------------------------------------------------------------------------------}
  507. {4th Dimension ASCII drivers opcodes}
  508. {--------------------------------------------------------------------------------}
  509.  
  510.         DriverEvent = (eNoEvent, eDrInit, eDrDeinit, eDrGotoX, eDrGotoY, eDrGetReso, eDrGetDim, eDrNewLine, eDrFormFeed, eDrCharInfo, eDrSendText, eDrOpenDoc, eDrCloseDoc, eDrParams, eDrSendB, eDrSendU, eDrSendUB, eDrSendParams, eDrReceiveParams);
  511.  
  512.  
  513.  
  514. {--------------------------------------------------------------------------------}
  515. {4th Dimension expressions and variables data structures}
  516. {--------------------------------------------------------------------------------}
  517.  
  518. {Basic data types}
  519.  
  520.         XPOINTER = ^SignedByte;    {Generic pointer}
  521.         XHANDLE = ^XPOINTER;    {Generic handle}
  522.         SBYTE = SignedByte;    {Any one byte data type}
  523.         UBYTE = Byte;            {One-byte enum fields}
  524.         SWORD = Integer;        {-32768..+32767}
  525.         UWORD = Integer;        {Any 16-bit data type}
  526.         SLONG = Longint;        {-2^31..+2^31-1}
  527.         ULONG = Longint;        {Any 32-bit data type}
  528.         REAL = Extended;        {Numeric value on 68K-based Macintosh}
  529.  
  530. {4th Dimension Date expression}
  531.  
  532.         DateBlock = record
  533.                 fDay: SWORD;    {0..31}
  534.                 fMonth: SWORD;    {1..12}
  535.                 fYear: SWORD;    {1..32767}
  536.             end;
  537.         DatePtr = ^DateBlock;
  538.         DateHdl = ^DatePtr;
  539.  
  540. {4th Dimension text expression}
  541.  
  542.         TextBlock = record
  543.                 fSize: SWORD;    {Size in bytes}
  544.                 fData: XHANDLE;    {Handle to text or NULL}
  545.             end;
  546.         TextPtr = ^TextBlock;
  547.         TextHdl = ^TextPtr;
  548.  
  549. {4th Dimension Picture expression}
  550.  
  551.         PictBlock = record
  552.                 fSize: SLONG;    {Size in bytes}
  553.                 fData: XHANDLE;    {Handle to picture definition}
  554.             end;
  555.         PictPtr = ^PictBlock;
  556.         PictHdl = ^PictPtr;
  557.  
  558. {4th Dimension picture expression trailer}
  559.  
  560.         PictEndBlock = record
  561.                 fOrigin: SLONG;    {QuickDraw point}
  562.                 fTransfer: SWORD;    {Transfer mode}
  563.             end;
  564.         PictEndPtr = ^PictEndBlock;
  565.         PictEndHdl = ^PictEndPtr;
  566.  
  567. {4th Dimension fixed length string variable}
  568.  
  569.         SStringBlock = record
  570.                 fSize: SWORD;            {Fixed length}
  571.                 fData: string[255];    {Pascal string (length byte followed by characters)}
  572.             end;
  573.         SStringPtr = ^SStringBlock;
  574.         SStringHdl = ^SStringPtr;
  575.  
  576. {4th Dimension Arrays}
  577.  
  578.         ArrayBlock = record
  579.                 fSize: SLONG;    {Number of elements}
  580.                 fData: XHANDLE;    {Handle to array contents (see below)}
  581.                 fCurrent: SWORD;    {Selected element number}
  582.             end;
  583.         ArrayPtr = ^ArrayBlock;
  584.         ArrayHdl = ^ArrayPtr;
  585.  
  586.  
  587. {4th Dimension array contents (fData handle of ArrayBlock)}
  588.         ArrayBoolean = packed array[0..0] of SBYTE;    {ARRAY BOOLEAN}
  589.         ArrayBoolPtr = ^ArrayBoolean;
  590.         ArrayBoolHdl = ^ArrayBoolPtr;
  591.         ArrayInteger = array[0..0] of SWORD;                {ARRAY INTEGER}
  592.         ArrayIntPtr = ^ArrayInteger;
  593.         ArrayIntHdl = ^ArrayIntPtr;
  594.         ArrayLongint = array[0..0] of SLONG;                {ARRAY LONGINT}
  595.         ArrayLongPtr = ^ArrayLongint;
  596.         ArrayLongHdl = ^ArrayLongPtr;
  597.         ArrayPict = array[0..0] of XHANDLE;            {ARRAY PICTURE}
  598.         ArrayPictPtr = ^ArrayPict;
  599.         ArrayPictHdl = ^ArrayPictPtr;
  600.         ArrayReal = array[0..0] of REAL;                {ARRAY REAL}
  601.         ArrayRealPtr = ^ArrayReal;
  602.         ArrayRealHdl = ^ArrayRealPtr;
  603.         ArrayDate = array[0..0] of DateBlock;            {ARRAY DATE}
  604.         ArrayDatePtr = ^ArrayDate;
  605.         ArrayDateHdl = ^ArrayDatePtr;
  606.         ArrayText = array[0..0] of TextBlock;            {ARRAY TEXT}
  607.         ArrayTextPtr = ^ArrayText;
  608.         ArrayTextHdl = ^ArrayTextPtr;
  609.         MStringBlock = record                                        {ARRAY STRING}
  610.                 fSize: SWORD;        {Fixed length}
  611.                 fData: string[1];    {Array of fSize Pascal strings}
  612.             end;
  613.         MStringPtr = ^MStringBlock;
  614.         MStringHdl = ^MStringPtr;
  615.         SmallValueBlock = record                                    {2D arrays}
  616.                 fType: SBYTE;        {Type}
  617.                 fFiller: SBYTE;
  618.                 fArray: ArrayBlock;    {Array of fSize Pascal strings}
  619.             end;
  620.         SmallValuePtr = ^SmallValueBlock;
  621.         SmallValueHdl = ^SmallValuePtr;
  622.  
  623.  
  624. {4th Dimension expression or variable}
  625.         ValueBlock = record
  626.                 fType: SBYTE;                {Type}
  627.                 fFiller: SBYTE;
  628.                 case SBYTE of
  629.                     1: (
  630.                             fReal: REAL
  631.                     );                {C_REAL variable}
  632.                     2: (
  633.                             fDate: DateBlock
  634.                     );            {C_DATE variable}
  635.                     3: (
  636.                             fBoolean: SBYTE
  637.                     );                {C_BOOLEAN variable}
  638.                     4: (
  639.                             fText: TextBlock
  640.                     );            {C_TEXT variable}
  641.                     5: (
  642.                             fPicture: PictBlock
  643.                     );            {C_PICTURE variable}
  644.                     6: (
  645.                             fLongint: SLONG
  646.                     );                {C_LONGINT variable}
  647.                     7: (
  648.                             fTime: SLONG
  649.                     );                {C_TIME variable}
  650.                     8: (
  651.                             fString: SStringBlock
  652.                     );        {C_STRING variable}
  653.                     9: (
  654.                             fArray: ArrayBlock
  655.                     );        {Any array}
  656.             end;
  657.         ValuePtr = ^ValueBlock;
  658.         ValueHdl = ^ValuePtr;
  659.  
  660.  
  661.  
  662. {--------------------------------------------------------------------------------}
  663. {4th Dimension parameter block for entry point routine}
  664. {--------------------------------------------------------------------------------}
  665.  
  666. {4th Dimension Search or Sort definition}
  667.  
  668.         LineBlock = record
  669.                 fOperator: SBYTE;                {Logical operator for search lines only}
  670.                 fField: SWORD;                {Field number to search or sort}
  671.                 fFile: SWORD;                {File number to search or sort}
  672.                 fOperation: SBYTE;                {Comparison operator or sorting order}
  673.                 case SBYTE of                                {Values for search lines only}
  674.                     1: (
  675.                             fString: string[40]
  676.                     );        {Alphanumeric or Text fields}
  677.                     2: (
  678.                             fReal: REAL
  679.                     );                {Real field (Extended on 68K, Double on other)}
  680.                     3: (
  681.                             fDate: DateBlock
  682.                     );            {Date field}
  683.                     4: (
  684.                             fLongint: SLONG
  685.                     );                {Long Integer field}
  686.                     5: (
  687.                             fInteger: SWORD
  688.                     );                {Integer field}
  689.                     6: (
  690.                             fBoolean: SBYTE
  691.                     );                {Boolean field}
  692.             end;
  693.         LinePtr = ^LineBlock;
  694.         LineHdl = ^LinePtr;
  695.  
  696. {Parameter block to pass to the 4th Dimension entry points routine}
  697.  
  698.         ParameterBlock = record
  699.                 fFileNumber: SWORD;                                {File number}
  700.                 fFieldNumber: SWORD;                                {Field number}
  701.                 fRecordNumber: SLONG;                                {Physical or Selected record number}
  702.                 fManyToOne: SBYTE;                                {Activation of many-to-one relations}
  703.                 fOneToMany: SBYTE;                                {Activation of one-to-many relations}
  704.                 fName: string[255];                        {File names, field names, ...}
  705.                 fH: XHANDLE;                                {Usually carries pointer or handle parameters}
  706.                 fError: SWORD;                                {Error result}
  707.                 fParam1: SLONG;                                {Multi-purpose}
  708.                 fParam2: SLONG;                                {Multi-purpose}
  709.                 fParam3: SLONG;                                {Multi-purpose}
  710.                 fParam4: SLONG;                                {Multi-purpose}
  711.                 fR: REAL;                                    {Usually carries Extended values}
  712.                 fD: DateBlock;                            {Usually carries 4D Date Values}
  713.                 fL: SLONG;                                {Usually carries 4D Long Integer or Time values}
  714.                 fI: SWORD;                                {Usually carries 4D Integer or Boolean values}
  715.                 fS: string[80];                        {Usually carries 4D Alphanumeric values}
  716.                 fT: TextBlock;                            {Usually carries 4D Text values}
  717.                 fClearOldVariable: SBYTE;                                {Tells 4D to dispose of old variable contents}
  718.                 fNumberOfLines: SWORD;                                {Number of lines in search or sort definition}
  719.                 fLines: array[0..0] of LineBlock;        {Search or Sort definition}
  720.             end;
  721.         ParameterPtr = ^ParameterBlock;
  722.         ParameterHdl = ^ParameterPtr;
  723.  
  724.  
  725.  
  726. {--------------------------------------------------------------------------------}
  727. {4D Extensions, external packages related data structures}
  728. {--------------------------------------------------------------------------------}
  729.  
  730. {Parameters passed by 4th Dimension (up to 25)}
  731.         PackageBlock = array[1..25] of XPOINTER;
  732.         PackagePtr = ^PackageBlock;
  733.         PackageHdl = ^PackagePtr;
  734.  
  735. {Function result (pointer is result size > 4 bytes)}
  736.         ResultValue = XPOINTER;
  737.         ResultPtr = ^ResultValue;
  738.         ResultHdl = ^ResultPtr;
  739.  
  740.  
  741. {External package initialization information block}
  742. {During the initialization phase, a pointer to a PackInitBlock data structure}
  743. {is passed to the entry point routine of your 4D extension as second argument}
  744. {(pointer to array of parameters during the other calls.)}
  745.         PackInitBlock = record
  746.                 fVersion: SLONG;    {4th Dimension version number}
  747.                 fLength: SLONG;    {Actual length of data structure in bytes}
  748.                 fCPUType: SLONG;    {Platform identifier}
  749.                 fCall4D: XPOINTER;{4D entry points routine address}
  750.             end;
  751.         PackInitPtr = ^PackInitBlock;
  752.         PackInitHdl = ^PackInitPtr;
  753.  
  754.  
  755. {Resource bundle for 4DEX, 4DPX or 4DPY resource based external packages}
  756.         ResEntryBlock = record
  757.                 fType: ULONG;    {Resource type}
  758.                 fLocalID: SWORD;    {Source code resource ID}
  759.                 fGlobalID: SWORD;    {Actual resource ID}
  760.             end;
  761.         ResEntryPtr = ^ResEntryBlock;
  762.         ResEntryHdl = ^ResEntryPtr;
  763.  
  764.         ResTabBlock = record
  765.                 fNumber: SWORD;                                {Number of entries}
  766.                 fEntries: array[0..0] of ResEntryBlock;    {Entries}
  767.             end;
  768.         ResTabPtr = ^ResTabBlock;
  769.         ResTabHdl = ^ResTabPtr;
  770.  
  771.  
  772. {--------------------------------------------------------------------------------}
  773. {4D Server and 4D Client, Read/Write data structure}
  774. {--------------------------------------------------------------------------------}
  775.  
  776.         ReadWriteBlock = record
  777.                 fDataType: ULONG;
  778.                 fDataID: SWORD;
  779.                 fDataSize: SLONG;
  780.                 fPackID: SLONG;
  781.                 fProcessID: SLONG;
  782.             end;
  783.         ReadWritePtr = ^ReadWriteBlock;
  784.         ReadWriteHdl = ^ReadWritePtr;
  785.  
  786.  
  787.  
  788. {--------------------------------------------------------------------------------}
  789. {4th Dimension, ASCII Driver data structure}
  790. {--------------------------------------------------------------------------------}
  791.  
  792.         AsciiDriverBlock = record
  793.                 fOpcode: SWORD;
  794.                 fParam1: SWORD;
  795.                 fParam2: SWORD;
  796.                 fLinePointer: XPOINTER;
  797.                 fError: SWORD;
  798.             end;
  799.  
  800.  
  801. {--------------------------------------------------------------------------------}
  802. {4th Dimension Entry point routine}
  803. {--------------------------------------------------------------------------------}
  804.     procedure Call4D (selector: SWORD; var params: ParameterBlock);
  805.     inline
  806.         $206D, $FFF4, $4E90;
  807.  
  808.  
  809. {_______________________________________________________________}
  810. implementation
  811. end.